
#ifndef SIXEL_CANVAS_H
#define SIXEL_CANVAS_H

#include "display_options.h"
#include "terminal_canvas.h"

namespace tv {
class ThreadPool;

class SixelCanvas final : public TerminalCanvas {
public:
  SixelCanvas(BufferedWriteSequencer *ws, ThreadPool *thread_pool,
              bool required_cursor_placement_workaround,
              const DisplayOptions &opts);

  int cell_height_for_pixels(int pixels) const final;

  void Send(int x, int dy, const Framebuffer &framebuffer,
            SeqType sequence_type, Duration end_of_frame) override;

private:
  const DisplayOptions &options_;
  ThreadPool *const executor_;
  const char *cursor_move_before_;
  const char *cursor_move_after_;
};
} // namespace tv
#endif // SIXEL_CANVAS_H
